Jackson আপনাকে JSON ডেটা থেকে Java অবজেক্ট তৈরি করার জন্য একটি Custom Deserializer তৈরি এবং ব্যবহার করার সুযোগ দেয়। এটি বিশেষভাবে দরকার হয় যখন JSON ফরম্যাট আপনার Java ক্লাসের সরাসরি ম্যাচ করে না বা বিশেষ ধরনের প্রক্রিয়াকরণ প্রয়োজন।
Custom Deserializer তৈরি করার ধাপ
Step 1: Maven Dependency
Jackson লাইব্রেরি যোগ করুন:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
Step 2: JSON উদাহরণ
ধরা যাক আমাদের JSON ফরম্যাটটি নিচের মতো:
{
"full_name": "John Doe",
"birth_year": 1995,
"location": {
"city": "Dhaka",
"country": "Bangladesh"
}
}
আমাদের Java ক্লাসের কাঠামো ভিন্ন:
class Person {
private String name;
private int age;
private String city;
// Constructors, Getters, and Setters
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// toString for display
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + ", city='" + city + "'}";
}
}
Step 3: Custom Deserializer তৈরি করা
Custom logic দিয়ে JSON ডেটা পার্স করার জন্য JsonDeserializer ক্লাসটি extend করতে হবে।
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.time.Year;
public class PersonDeserializer extends JsonDeserializer<Person> {
@Override
public Person deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
JsonNode node = parser.getCodec().readTree(parser);
// Extract JSON fields
String fullName = node.get("full_name").asText();
int birthYear = node.get("birth_year").asInt();
String city = node.get("location").get("city").asText();
// Calculate age
int currentYear = Year.now().getValue();
int age = currentYear - birthYear;
// Create and return Person object
return new Person(fullName, age, city);
}
}
Step 4: Custom Deserializer Map করা
@JsonDeserialize অ্যানোটেশন ব্যবহার করে Custom Deserializer ম্যাপ করতে হবে।
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = PersonDeserializer.class)
class Person {
private String name;
private int age;
private String city;
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + ", city='" + city + "'}";
}
}
Step 5: JSON থেকে Java অবজেক্টে রূপান্তর
ObjectMapper ব্যবহার করে JSON ডেটা ডেসিরিয়ালাইজ করুন।
import com.fasterxml.jackson.databind.ObjectMapper;
public class CustomDeserializerExample {
public static void main(String[] args) throws Exception {
String json = """
{
"full_name": "John Doe",
"birth_year": 1995,
"location": {
"city": "Dhaka",
"country": "Bangladesh"
}
}
""";
// ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
// Deserialize JSON to Person object
Person person = objectMapper.readValue(json, Person.class);
// Print the Person object
System.out.println(person);
}
}
Output
Person{name='John Doe', age=29, city='Dhaka'}
কীভাবে কাজ করে?
- Custom Deserializer (
PersonDeserializer):- JSON ডেটা পড়ে এবং প্রয়োজনীয় প্রক্রিয়াকরণ (যেমন: জন্ম তারিখ থেকে বয়স গণনা) করে।
- কাস্টম লজিক ব্যবহার করে Java অবজেক্ট তৈরি করে।
- Mapping:
@JsonDeserialize(using = PersonDeserializer.class)ব্যবহার করে ক্লাসটিতে Deserializer সেট করা হয়।
- ObjectMapper:
- JSON ডেটা থেকে কাস্টম লজিকের মাধ্যমে Java অবজেক্ট তৈরি করে।
ব্যবহার ক্ষেত্র
- JSON ডেটার ফরম্যাট এবং Java অবজেক্টের কাঠামো ভিন্ন হলে।
- বিশেষ ডেটা প্রক্রিয়াকরণের প্রয়োজন হলে (যেমন: তারিখ, সময়, বা কাস্টম লজিক)।
- বড় এবং জটিল JSON ডেটা হ্যান্ডল করতে।
Jackson এর এই ক্ষমতা আপনার প্রজেক্টে JSON প্রসেসিং অনেক সহজ এবং কার্যকর করে তুলবে।
Read more